Add some (silly) GNotification example
authorMatthias Clasen <mclasen@redhat.com>
Mon, 21 Oct 2013 21:23:44 +0000 (17:23 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Mon, 21 Oct 2013 21:23:44 +0000 (17:23 -0400)
Bloatpad can now notify you.

examples/bloatpad.c

index 0789ea920ee6c99aa2bfdfd287b54d112c26b01d..5ed5e7b47573f8eec272a0f3bd98bb90f9dc3c76 100644 (file)
@@ -113,12 +113,46 @@ window_paste (GSimpleAction *action,
 
 }
 
+static void
+activate_clear (GSimpleAction *action,
+                GVariant      *parameter,
+                gpointer       user_data)
+{
+  GtkWindow *window = GTK_WINDOW (user_data);
+  GtkTextView *text = g_object_get_data ((GObject*)window, "bloatpad-text");
+
+  gtk_text_buffer_set_text (gtk_text_view_get_buffer (text), "", -1);
+}
+
+static void
+text_buffer_changed_cb (GtkTextBuffer *buffer,
+                        GApplication  *app)
+{
+  gint old_n, n;
+
+  old_n = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (buffer), "line-count"));
+  n = gtk_text_buffer_get_line_count (buffer);
+  g_object_set_data (G_OBJECT (buffer), "line-count", GINT_TO_POINTER (n));
+
+  if (old_n < 3 && n == 3)
+    {
+      GNotification *n;
+      n = g_notification_new ("Three lines of text");
+      g_notification_set_body (n, "Keep up the good work!");
+      g_notification_add_button (n, "Start over", "app.clear");
+      g_application_send_notification (app, "three-lines", n);
+      g_object_unref (n);
+    }
+}
+
 static GActionEntry win_entries[] = {
   { "copy", window_copy, NULL, NULL, NULL },
   { "paste", window_paste, NULL, NULL, NULL },
   { "fullscreen", activate_toggle, NULL, "false", change_fullscreen_state },
   { "busy", activate_toggle, NULL, "false", change_busy_state },
-  { "justify", activate_radio, "s", "'left'", change_justify_state }
+  { "justify", activate_radio, "s", "'left'", change_justify_state },
+  { "clear", activate_clear, NULL, NULL, NULL }
+
 };
 
 static void
@@ -196,6 +230,8 @@ new_window (GApplication *app,
           g_free (contents);
         }
     }
+  g_signal_connect (gtk_text_view_get_buffer (GTK_TEXT_VIEW (view)), "changed",
+                    G_CALLBACK (text_buffer_changed_cb), app);
 
   gtk_widget_show_all (GTK_WIDGET (window));
 }